package pandora.bo.MRS;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import pandora.dto.PriceDTO;
import pandora.dto.ProductDTO;
import pandora.dto.StoreDTO;
import pandora.data.*;
import pandora.data.mysql.*;

public class Estadisticas implements IEstadisticas{

	

	private IPriceDAO  prDAO = new JDBCPriceDAO();
	private IPriceDAO pridao = new JDBCPriceDAO();
	private IStoreDAO sdao = new JDBCStoreDAO();
	private StoreDTO store;
	private PriceDTO price;
	
	
	
	private IStoreDAO stdao = new JDBCStoreDAO();
	
	public Estadisticas(){}
	
	public Estadisticas(List<StoreDTO> s){
		s = stdao.getAllStores();
	}
	
	public Estadisticas(IPriceDAO prDAO, IPriceDAO pridao, StoreDTO store,
			PriceDTO price, IStoreDAO stdao) {
		super();
		this.prDAO = prDAO;
		this.pridao = pridao;
		this.store = store;
		this.price = price;
		this.stdao = stdao;
	}
	
	public List<ProductDTO> getListaProductos() {
		IProductDAO prodDAO = new JDBCProductDAO();
		
		List<ProductDTO> prod;
		
		prod = prodDAO.selectAllProducts();
		
		return prod;
	}
	
	
	
	//mostras las tiendas donde esta ese producto
	public List<StoreDTO> muestraStores(ProductDTO p){
		
		List<StoreDTO> store = new ArrayList<StoreDTO>();
		List<StoreDTO> lista = pridao.selectPriceByStoreProduct(p);
		for(StoreDTO s: lista){
			if(!store.contains(s))
				store.add(s);
		}
		return lista;
		
	}
	
	//mostrar 
	public List<PriceDTO> muestraPreciosDe(Date d1, Date d2, StoreDTO s, ProductDTO p){
		
		List<PriceDTO> listaa = pridao.selectAllStoresPricesBetween(d1, d2, s, p);
		return listaa;
	}
	
	

	//mostrar una lista de precios de un producto y una tienda
	public List<PriceDTO> mostrarPreciosPorProductStore(StoreDTO st, ProductDTO pr){
		
		List<PriceDTO> list1 = new ArrayList<PriceDTO>();
		List<PriceDTO> lista = pridao.selectPriceByStoreProduct(st, pr);
		
		for(PriceDTO p: lista){
			
			PriceDTO pp = new PriceDTO();
			if(!list1.contains(pp.getPrice())){
				list1.add(p);
			}
		}
		
		return lista;
		
		
	}
	
	

	
	//seleccion precios entre fechas de un comercio
	
	public List<PriceDTO> selectAllPricesStoreBetween(Date d1, Date d2) {
		List<PriceDTO> mspb = new ArrayList<PriceDTO>();
		
		List<PriceDTO> pisb = prDAO.selectAllPricesBetween(store.getStoreNIF(),d1, d2);
		
		for(PriceDTO p: pisb){
			
			PriceDTO pp = new PriceDTO();
			
			if(!mspb.contains(pp.getPrice()))
				mspb.add(p);
		}
		
		
		return mspb;
	}
	
	/*
	//seleccion precios entre fechas de todos los comercios
	public List<PriceDTO> mostrarAllPricesStoresBetween(Date d1, Date d2) {
		
		List<PriceDTO> mspb = new ArrayList<PriceDTO>();
		
		List<PriceDTO> pisb = prDAO.selectAllStoresPricesBetween(d1, d2);
		
			for(PriceDTO p: pisb){
			
				if(!mspb.contains(p))
					mspb.add(p);
			}
		return mspb;
	}
	*/
	
		
	//mostrar el precio 
	
	//seleccion de todos los precios mediante un codigo de barras
	public List<PriceDTO> selectAllPrices(String barcode){
		
		List<PriceDTO> lista = new ArrayList<PriceDTO>();
		List<PriceDTO> list = prDAO.selectAllPrices();
		for(PriceDTO p: list){
			p.getProduct().getBarcode();
			if(!list.contains(p))
				lista.add(p);
		}
		
		return lista;
		
	}
	
	//seleccion de un precio por codigo de barra
	public ProductDTO selectPrice(String barcode){
		return null;
	}
 	
	//create un nuevo metodo
	//en el DAO que seleccione todos los precios al pasarle un codigo de barras
	
	//public List<PriceDTO> selectAllValidProducts(){
	//	List<PriceDTO> lista = prDAO.
	//}
	
}
